package com.itbour.web.action.com;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPConnection;

import com.itbour.common.base.BaseAction;
import com.itbour.common.log.ErrorLogger;
import com.itbour.common.util.StringUtils;
import com.itbour.def.Constants;
import com.itbour.def.MessageCode;
import com.itbour.def.MessageCodeConstants;
import com.itbour.def.MessageType;
import com.itbour.def.SystemConf;
import com.itbour.dto.com.UserInfoDto;
import com.itbour.dto.com.UserLanguageInfoDto;
import com.itbour.helper.CommonHelper;
import com.itbour.helper.XMPPHelper;
import com.itbour.service.com.UserService;

/**
 * copyright pirate alliance team 2014
 *
 * @author xuwei
 */
public class RegisterAction extends BaseAction
{
	/**
	 *
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 用户service
	 */
	private UserService userService;

	/**
	 * 用户情报
	 */
	private UserInfoDto userInfoDto;

	/**
	 * 用户图像
	 */
	private File userIcon;

	/**
	 * 用户语言情报
	 */
	private UserLanguageInfoDto userLanguageInfo;

//	/**
//	 * 用户注册
//	 * @return
//	 */
//	public String userRegister()
//	{
//		String userIdSeq = CommonHelper.getSequence(Constants.TB_M_USER);
//
//		String goldenCoinIdSeq = CommonHelper.getSequence(Constants.TB_GOLDEN_COIN);
//		String silverCoinIdSeq = CommonHelper.getSequence(Constants.TB_SILVER_COIN);
//
//		userInfoDto.setUser_id(userIdSeq);
//		userInfoDto.setGolden_coin_id(goldenCoinIdSeq);
//		userInfoDto.setSilver_coin_id(silverCoinIdSeq);
//
//		if(userIcon != null)
//		{
//			userInfoDto.setIcon(this.saveUserIcon(userInfoDto.getUser_id()));
//		}
//
//		if(StringUtils.isEmpty(userInfoDto.getAccount_id()))
//		{
//			userInfoDto.setAccount_id("0000000000000000");
//		}
//
//		if(StringUtils.isEmpty(userInfoDto.getName_en_family()))
//		{
//			userInfoDto.setName_en_family("");
//		}
//
//		if(StringUtils.isEmpty(userInfoDto.getName_en_middle()))
//		{
//			userInfoDto.setName_en_middle("");
//		}
//
//		if(StringUtils.isEmpty(userInfoDto.getName_en_last()))
//		{
//			userInfoDto.setName_en_last("");
//		}
//
//		userService.userRegister(userInfoDto,userLanguageInfo);
//
//		userInfoDto = userService.getServiceUserInfo(userInfoDto.getUser_id());
//		//userInfoDto.setAccount_id("00000001");
//
//		XMPPConnection connection = null;
//		try
//		{
//			connection = XMPPHelper.getConnection(SystemConf.getXMPPDomain());
//
//			connection.connect();
//
//			Map<String,String> attr = new HashMap<String,String>();
//			attr.put("email", userInfoDto.getEmail());
//			attr.put("name", userInfoDto.getName_kanji_mei());
//
//			XMPPHelper.createAccount(connection, userIdSeq, userInfoDto.getPassword(), attr);
//
//			connection.login(userIdSeq, userInfoDto.getPassword());
//
//			String nickName = userInfoDto.getName_kanji_sei() + userInfoDto.getName_kanji_mei();
//			if(StringUtils.isEmpty(nickName))
//			{
//				nickName = userInfoDto.getName_en_middle() + userInfoDto.getName_en_last();
//			}
//			String userIconPath = StringUtils.linkFilePath(SystemConf.getImageRootDir(), userInfoDto.getFace_img());
//			String desc = "";
//			if(userLanguageInfo != null)
//			{
//				desc = userLanguageInfo.getSelf_introduction();
//			}
//			XMPPHelper.saveUserVcard(connection, nickName, userInfoDto.getEmail(), userIconPath, desc);
//		}
//		catch(Exception e)
//		{
//
//		}
//		finally
//		{
//			if(connection != null)
//			{
//				try
//				{
//					connection.disconnect();
//				}
//				catch (NotConnectedException e)
//				{
//					e.printStackTrace();
//				}
//			}
//		}
//		return SUCCESS;
//	}
//
//	/**
//	 * 用户情报更新
//	 * @return
//	 */
//	public String userUpdate()
//	{
//		if(userIcon != null)
//		{
//			userInfoDto.setIcon(this.saveUserIcon(userInfoDto.getUser_id()));
//		}
//
//		int count = userService.updateUserInfo(userInfoDto, userLanguageInfo);
//		if (count != 1)
//		{
//			userInfoDto = null;
//		}
//		else
//		{
//			userInfoDto = userService.getServiceUserInfo(userInfoDto.getUser_id());
//		}
//
//		XMPPConnection connection = null;
//		try
//		{
//			connection = XMPPHelper.getConnection(SystemConf.getXMPPDomain());
//
//			connection.connect();
//
//			connection.login(userInfoDto.getUser_id(), userInfoDto.getPassword());
//
//			String nickName = userInfoDto.getName_kanji_sei() + userInfoDto.getName_kanji_mei();
//			if(StringUtils.isEmpty(nickName))
//			{
//				nickName = userInfoDto.getName_en_middle() + userInfoDto.getName_en_last();
//			}
//			String userIconPath = StringUtils.linkFilePath(SystemConf.getImageRootDir(), userInfoDto.getFace_img());
//			String desc = "";
//			if(userLanguageInfo != null)
//			{
//				desc = userLanguageInfo.getSelf_introduction();
//			}
//			XMPPHelper.saveUserVcard(connection, nickName, userInfoDto.getEmail(), userIconPath, desc);
//		}
//		catch(Exception e)
//		{
//
//		}
//		finally
//		{
//			if(connection != null)
//			{
//				try
//				{
//					connection.disconnect();
//				}
//				catch (NotConnectedException e)
//				{
//					e.printStackTrace();
//				}
//			}
//		}
//		return SUCCESS;
//	}

	/**
	 * 用户图像保存
	 * @param userId
	 * @return
	 */
	private String saveUserIcon(String userId)
	{
		String imageRootDir = SystemConf.getImageRootDir();
		String userIconVaue = userId + ".jpg";
		String userIconPath = "user_icon/" + userIconVaue;

		File saveFile = new File(StringUtils.linkFilePath(imageRootDir, userIconPath));

		try
		{
			FileUtils.copyFile(userIcon, saveFile);
		}
		catch (IOException e)
		{
			ErrorLogger.log(e, new MessageCode(MessageCodeConstants.E_00000001,MessageType.ERROR), "RegisterAction", e.getMessage());
			return null;
		}
		finally
		{
			userIcon.delete();
		}

		return userIconPath;
	}

	/**
	 * @return the userService
	 */
	public UserService getUserService()
	{
		return userService;
	}

	/**
	 * @param userService
	 *            the userService to set
	 */
	public void setUserService(UserService userService)
	{
		this.userService = userService;
	}

	/**
	 * @return the userInfoDto
	 */
	public UserInfoDto getUserInfoDto()
	{
		return userInfoDto;
	}

	/**
	 * @param userInfoDto
	 *            the userInfoDto to set
	 */
	public void setUserInfoDto(UserInfoDto userInfoDto)
	{
		this.userInfoDto = userInfoDto;
	}

	public File getUserIcon()
	{
		return userIcon;
	}

	public void setUserIcon(File userIcon)
	{
		this.userIcon = userIcon;
	}

	/**
	 * @return the userLanguageInfo
	 */
	public UserLanguageInfoDto getUserLanguageInfo()
	{
		return userLanguageInfo;
	}

	/**
	 * @param userLanguageInfo the userLanguageInfo to set
	 */
	public void setUserLanguageInfo(UserLanguageInfoDto userLanguageInfo)
	{
		this.userLanguageInfo = userLanguageInfo;
	}

}
